#include <iostream>
#include <cstdio>
#include <stack>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

struct D{
    int color;
    int number;
    int index;
};
int MOD=10007;

bool cmp(D a,D b){
    return a.color<b.color;
}
int Partision(vector<D> &data,int start,int end){
    int i=start,j=end;
    D k=data[i];
    while( i<j ){
        while(i<j && data[j].color >= k.color) j--;
        data[i]=data[j];
        while(i<j && data[i].color <= k.color) i++;
        data[j]=data[i];
    }
    data[i]=k;
    for(int i=0;i<data.size();i++){
        cout << data[i].color <<" " ;
    }cout <<endl;
    
    return i;
}


int quickSort(vector<D> &data,int n,int start,int end){
    if(end<=start){
        return 0;
    }
    // if(end-start!=n-1 && data[start].color==data[end].color){
    //     int anx=0;
    //     for(int i=start;i<end;i++){
    //         for(int j=i+1;j<=end;j++){
    //             if(1&(data[j].index-data[i].index)){
    //                 anx= (anx+(((data[j].index+data[i].index)%MOD)*(data[j].number*data[i].number)%MOD)%MOD)%MOD;
    //             }
    //         }
    //     }
    //     return anx;
    // }
    //利用快排计算
    int k=Partision(data,start,end);
    cout << k <<endl;
    int ans1=quickSort(data,n,start,k-1);
    int ans2=quickSort(data,n,k+1,end);

    return (ans1+ans2)%MOD;
}

//error xxxxx
//思路不对
int main(){
    freopen("in.txt","r",stdin);
    int n,m;
    cin>> n>>m;
    vector<D> data;
    for(int i=0;i<n;i++){
        D d;
        cin >> d.number;
        d.index=i+1;
        data.push_back(d);
    }
    for(int i=0;i<n;i++){
        cin>>data[i].color;
    }
    //quick sort
    int ans=quickSort(data,n,0,n-1);
    for(int i=0;i<n;i++){
        cout << data[i].color << " ";
    }cout <<endl;


    cout <<ans<<endl;


    return 0;
}